﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using BL;
using BE;

namespace UI.Logistica
{
    public partial class frmRequerimiento : System.Web.UI.Page
    {

        public List<Articulo_BE> listaReq = new List<Articulo_BE>();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            
            {
                lblFecha.Text = DateTime.Now.ToShortDateString();
                lblUsuario.Text = User.Identity.Name;
                llenaCombos();

                HttpContext.Current.Session["ReqDetalle"] = listaReq;

            }
        }

        void llenaCombos()
        {
            DataTable dato = new DataTable();
           

            Requerimiento_BL obj = new Requerimiento_BL();


            dato = obj.DATA_CENTROCOSTO_Listar(1);
            ddlCentroCosto.DataSource = dato;
            ddlCentroCosto.DataTextField = "descripcion";
            ddlCentroCosto.DataValueField = "Id_CentroCosto";
            ddlCentroCosto.DataBind();

            ddlCentroCosto.Items.Insert(0, "-SELECCIONE-");
        }

        protected void btnBuscar2_Click(object sender, EventArgs e)
        {
            Articulo_BL obj = new Articulo_BL();
            DataTable dato = new DataTable();

            string NOMBRE = "";
            if (txtArticulo.Text.Length == 0)
            {
                NOMBRE = "TODOS";
            }

            else
            {
                NOMBRE = txtArticulo.Text.Trim().ToUpper();
            }
            dato = obj.DATA_Articulo_Listar(NOMBRE);

            grvArticulo.DataSource = dato;
            grvArticulo.DataBind();
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            mdArticulos.Show();
        }

        protected void btnCerrar_Click(object sender, EventArgs e)
        {
            mdArticulos.Hide();
        }

        protected void grvArticulo_SelectedIndexChanged(object sender, EventArgs e)
        {
            lblMensajeModal.Text = "";


            TextBox txtCantidad = (TextBox)grvArticulo.SelectedRow.FindControl("txtCantidad");
            if (!IsNumeric(txtCantidad.Text))
            {
                ClientScript.RegisterStartupScript(this.GetType(), "Mensaje", "alert('Ingrese cantidad correcta');", true);
                txtCantidad.Focus();
                return;
            }

            HttpContext context = HttpContext.Current;
            List<Articulo_BE> lis = (List<Articulo_BE>)context.Session["ReqDetalle"];
            Articulo_BE detalle = new Articulo_BE();

            detalle.Item = lis.Count + 1;
            detalle.Descripcion = grvArticulo.SelectedDataKey["Descripcion"].ToString();
            detalle.Codigo_Articulo = grvArticulo.SelectedDataKey["Codigo_Articulo"].ToString();
            detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
            detalle.Estado = "1";


            // se pregunta si el artículo ya existe
            if (lis.Exists(delegate(Articulo_BE x) { return x.Descripcion == detalle.Descripcion; }))
            {
                lblMensajeModal.Text = "El Producto : " + detalle.Descripcion + " ya existe";
                return;
            }



            lis.Add(detalle);

            grvRequerimiento.DataSource = lis;
            grvRequerimiento.DataBind();


        }

        public static bool IsNumeric(string s)
        {
            double Result;
            return double.TryParse(s, out Result);  // TryParse routines were added in Framework version 2.0.
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            List<Articulo_BE> lis = (List<Articulo_BE>)context.Session["ReqDetalle"];
            if (lis.Count == 0)
            {
                string script = @"alert('Debe registrar artículos');";
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Advertencia", script, true);
                return;
            }



            if (ddlCentroCosto.SelectedItem.Text == "-SELECCIONE-")
            {

                string script = @"alert('Debe seleccionar un Área');";
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Advertencia", script, true);
                return;
            }


            try
            {
                Grabar();
                lblMensaje.Text = "Requerimiento grabado correctamente";
            }
            catch ( Exception ex)
            {
                lblMensaje.Text="Ocurrio el siguiente error al grabar: "+ex.Message+"";
               
            }
            
        }

        void Grabar()
        {



            HttpContext context = HttpContext.Current;
            List<Articulo_BE> lis = (List<Articulo_BE>)context.Session["ReqDetalle"];
            Requerimiento_BL obj = new Requerimiento_BL();
            Requerimiento_BE req = new Requerimiento_BE();
            
            req.Id_Especialidad = "";
            req.Usuario = "";
            req.Fecha_Requerimiento = DateTime.Now;
            req.Id_Estado = 1;

            Int32 x = obj.DATA_REQUERIMIENTO_Insert(req, lis);

            lblRequerimiento.Text = x.ToString();
            


        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            List<Articulo_BE> lis = (List<Articulo_BE>)context.Session["ReqDetalle"];

            foreach (GridViewRow objItem in grvRequerimiento.Rows)
            {
                CheckBox remove = ((CheckBox)objItem.Cells[0].FindControl("chkArticulo"));
                if (remove.Checked == true)
                {
                  
                    
                    string ITEM = grvRequerimiento.DataKeys[objItem.RowIndex].Values["Item"].ToString();


                    Articulo_BE ENT = lis.Find(delegate(Articulo_BE x) { return x.Item == Convert.ToInt32(ITEM); });
                    lis.Remove(ENT);
                }

                int val = 0;
                foreach (Articulo_BE Fila in lis)
                {
                    Fila.Item = val + 1;
                    val++;
                }


                grvRequerimiento.DataSource = lis;
                grvRequerimiento.DataBind();
            }
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            limpia();
        }

        void limpia()
        {
            HttpContext context = HttpContext.Current;
            List<Articulo_BE> lis = (List<Articulo_BE>)context.Session["ReqDetalle"];
            lis.Clear();
            DataTable dato = new DataTable();
            lblMensaje.Text = "";
            ddlCentroCosto.SelectedIndex = 0;
            lblRequerimiento.Text = "";
            grvRequerimiento.DataSource = lis;
            grvRequerimiento.DataBind();
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("frmRequerimientoConsulta");
        }
    }
}